import AttributeUtil from "@/AttributeUtil";
import BaseUtil from "@/BaseUtil";
import SelectUtil from "@/SelectUtil";
import 单位函数 from "框架/通用/单位";

export default class 回复系统 {
  constructor() {
    BaseUtil.onTimer(0.5, this.action);
  }
  action() {
    // 遍历所有单位
    SelectUtil.forAllAliveUnits(回复系统.regenLoop);
    return true;
  }
  static regenLoop(u: unit) {
    let 属性 = AttributeUtil.getUnitAttribute(u, true);
    if (属性 == null) return;

    let 生命恢复 = 属性.生命恢复 ?? 0;
    let 法力恢复 = 属性.法力恢复 ?? 0;
    let 生命恢复增强 = 属性.生命恢复增强 ?? 0;
    let 法力恢复增强 = 属性.法力恢复增强 ?? 0;
    let 原生生命恢复 = GetUnitState(u, UNIT_STATE_LIFE_REGEN);
    let 原生法力恢复 = GetUnitState(u, UNIT_STATE_MANA_REGEN);
    // 体质
    let 体质 = 单位函数.取总耐力(u);

    let 生命 =
      原生生命恢复 * 生命恢复增强 +
      (生命恢复 + 体质 * 0.05) * (1 + 生命恢复增强);
    let 法力 =
      原生法力恢复 * 法力恢复增强 +
      (法力恢复 + 体质 * 0.03) * (1 + 法力恢复增强);

    let 当前生命 = GetUnitState(u, UNIT_STATE_LIFE);
    let 当前法力 = GetUnitState(u, UNIT_STATE_MANA);

    SetUnitState(u, UNIT_STATE_LIFE, 当前生命 + 生命 / 2);
    SetUnitState(u, UNIT_STATE_MANA, 当前法力 + 法力 / 2);
  }
}
